from collections import defaultdict

from api.mod.modLoader import ModLoader
from framework.Singleton import Singleton
from framework.syntacticSugar.EventEntiys import EventEntiys
from mod.jail.function import jailDo

a = Singleton


class EnumMethodType:
    """
    权能
    """
    manager_power = "manager_power"  # 管理势力时可以操作的事件
    to_charts = 'to_charts'  # 对角色互动时可以操作的事件
    to_self_charts = 'to_self_charts'  # 对自己同势力的人
    power_policy = 'power_policy'  # 管理自己国家政策的决议
    war = 'war'  # 战争中的决议
    manager_jail = 'manager_jail'  # 对监狱管理操作的事件
    minister = 'minister' #对自己的手下可以操作的事件


class Authority:
    """
    职能类
    """

    def __init__(self):
        self.ModeLoader = ModLoader()
        self.AuthorityMapper = defaultdict(list)  # 里面记录着该用户可以操作的事件总和 键就是EnumMethonType枚举值

        self.event_method = "manager_power"  # 当前事件类型 用于自判定权能 我们会将他封装给event_entiys

        self.function_tigger = [

        ]
        # 只有某些条件满足时(这里需要加入条件的句柄 jailDo -> True 中)才会出现的事件

    def special_event(self, event_entiys: EventEntiys):
        """
        特殊事件促发
        :return:
        """
        pass_events = []

        for mapper in self.function_tigger:
            handler_func = mapper.get("function_path")

            event_entiys.event_method = self.event_method
            assert handler_func is not None
            bool_ret = handler_func(event_entiys)
            if bool_ret is True: pass_events.append(bool_ret)

        return pass_events
